LODS Загрузка строки (из байтов или слов)

Флаги не меняются.

Команда:

LODS source-str 

Логика:

Accumulator = (DS:SI)
                     if DF = 0
                         SI = SI + n    ; n = 1 для байта, 2 - для слова
                     else
                         SI = SI - n 

Команда LODS передает байт или слово, расположенное по адресу DS:SI в AX или AL, а также инкрементирует или декрементирует SI (в зависимости от состояния флага направления DF), чтобы указатель переместился на следующий элемент.

Операнды Такт байты (слова)ОбращенияБайтыПример
source-str12(16) -1LODS LIST
(повтор) source-str9+13(17)/rep 1/rep 1REP LODS LIST

Примечания:
Эта команда всегда ассемблируется или как LODSB, загрузка строки из байтов, или как LODSW, загрузка строки из слов, в зависимости от того, указывает ли source-str на строку байтов или на строку слов. Однако, в обоих случаях Вы должны в явном виде загрузить в регистр SI смещение строки.
Хотя и разрешется использовать эту команду в повторном режиме, это почти никогда не делается, т.к. это привело бы к постоянному изменению значения в AL.
Следующий пример иллюстрирует пересылку восьми байтов иэ INIT_PORT в порт 250. (Не пробуйте делать этого на вашей машине, если Вы не знаете о назначении порта 250.)

INIT_PORT:
                 DB   '$CMD0000'    		;Строка, которую мы хотим переслать
                      
                      
                 CLD                		;Будем передвигаться в прямом
                                    		;направлении
                 LEA  SI,INIT_PORT  		;Засылаем в SI стартовый адрес
                                    		;строки
                 MOV  CX,8          		;CX является счетчиком
                                    		;для команды LOOP
         AGAIN:  LODS INIT_PORT     		;В имени INIT_PORT ассемблер
                 OUT  250,AL        		;нуждается  только для того, чтобы
                                    		; определить, имеет ли он дело
                 LOOP AGAIN         		; с байтами или со словами

Hosted by uCoz